<template>
  <div class="task-view">
    <el-button type="primary" @click="sendToModuleData">发送数据</el-button>
    <TaskForm ref="moudleRef" />
  </div>
</template>

<script setup lang="ts">
defineOptions({
  name: "TaskView",
  components: {}
});


import { onMounted, provide, ref } from 'vue';
import createTaskModule from "mctp-modules-task/src/index";
import TaskForm from "mctp-modules-task/src/components/index.vue";
import type { ModuleInterface, SendCmd } from "mctp-modules-task/src/types";
import { handlePluginCommand } from '@/utils/commandHandler';
import type { AxiosRequestConfig } from 'axios';
import type { Response } from '@/mctp-api';

// 1. EventData 初始值：空对象（业务数据由后端返回，初始无需填充）
const initialCalibData = {};

// 2. 平台命令处理：完全转发插件传递的所有参数，对齐 createPost 逻辑
const handleModuleCmd: SendCmd<{
  moduleId: string;
  fixedParams?: any;
  data?: Record<string, any>;
  params?: any;
  config?: AxiosRequestConfig;
}, Response<any>> = async (moduleName, cmd, payload) => {
  if (moduleName !== "TaskForm") return { code: 400, msg: "模块不匹配", data: null };

  console.log("平台接收校准指令：", cmd, payload);
  // 直接调用平台的 handlePluginCommand，传递所有参数（复刻 createPost 逻辑）
  return handlePluginCommand(
    payload?.moduleId || moduleName, // 模块ID（替代 createPost 的 url）
    payload?.fixedParams, // 固定参数（对齐 createPost 的 fixedParams）
    payload?.data, // 业务数据（对齐 createPost 的 data）
    payload?.params, // URL 参数（对齐 createPost 的 params）
    payload?.config // Axios 配置（对齐 createPost 的 config）
  );
};

// 3. 创建插件实例：完全对齐原有调用方式
const taskModule: ModuleInterface<typeof initialCalibData> = createTaskModule(
  handleModuleCmd,
  initialCalibData
);

const SEND_TASK_CMD_KEY = "send-task-cmd"; // 协商好的字符串Key
const GET_TASK_DATA_KEY = "get-task-data"; // 配套的“获取数据”Key

provide(SEND_TASK_CMD_KEY, (cmd: string, payload?: any) => {
  return taskModule.sendCommand(cmd, payload);
});
// 注入“获取数据”方法（供插件调用）
console.log("平台确认是否为响应式对象", (taskModule.eventData as any).value);
provide(GET_TASK_DATA_KEY, () => taskModule.eventData);

// 5. 手动初始化插件
taskModule.startup();

const moudleRef = ref(null);

const index = ref(0);

onMounted(() => {
  (moudleRef.value as any).dataEvent(index.value);
})


const sendToModuleData = () => {
  setInterval(() => {
    index.value++;
    (moudleRef.value as any).dataEvent(index.value);
  }, 100);

}

</script>

<style lang="scss" scoped>
.task-view {
  padding: 12px;
  height: 100%;
  overflow: scroll;
}
</style>
